﻿Imports PTIC_GestionBDD
Imports PTIC_Util

Namespace moteurTauxGaranti1

    ''' <summary>
    ''' Permet de lancer une simulation en choquant un paramètre
    ''' </summary>
    ''' <remarks></remarks>
    Public Class simulationSensibiliteParametreSAS
        Inherits simulationIndividuelle

        Private _Connection As ConnectionSAS

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New(ByVal moteur As IIntegMoteur_MethodeEqTarif, _
                       ByVal nomParametre As String, _
                       ByVal chocMin As Double, _
                       ByVal chocMax As Double, _
                       ByVal pas As Double, _
                       ByVal chocRadar As Double,
                       ByVal Connection As ConnectionSAS)
            MyBase.New(moteur, nomParametre, chocMin, chocMax, pas, chocRadar)
            _Connection = Connection
        End Sub
        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Protected Overrides Sub procedureCalcul()

            If ModuleTauxGaranti.currentasyncinfo IsNot Nothing Then
                Using ModuleTauxGaranti.currentasyncinfo
                    ModuleTauxGaranti.currentasyncinfo.Progress = 0
                    ModuleTauxGaranti.currentasyncinfo.Message = "Simulation des variations " & Me.Description & "."
                End Using
            End If

            'Exécuter le processus stocké SAS (sachant que le scénario central s'est déjà exécuté, certaines
            'macro variables sont déjà renseignées. Il faut passer en paramètre les autres (nom de la colonne à choquer,
            'chocMin, ChocMax, Pas)

            Dim Params As String = "NomParametre=" & _nom & " ChocMin=" & _chocMin &
                " ChocMax=" & _chocMax & " pas=" & _pas & " ChocRadar=" & _chocRadar
            Params = Params.Replace(",", ".")
            _Connection.ExecuteStoredProcess(csteEmplacementReferentiel, "CalculTxGarEqTarifaireSimulSensParam", Params)

            If ModuleTauxGaranti.currentasyncinfo IsNot Nothing Then
                Using ModuleTauxGaranti.currentasyncinfo
                    ModuleTauxGaranti.currentasyncinfo.Progress = 0.5
                    ModuleTauxGaranti.currentasyncinfo.Message = "Simulation des variations " & Me.Description & "."
                End Using
            End If

            'Récupération de la table SAS contenant la synthèse des résultats de la simulation des paramètres
            Dim ResultatsDet As New TableBDD_SAS("TxGarEqTarifResSimulSynth",
                New Cla_NomFichier(csteEmplacementCalculsInt & "Traitmodeltxgareqtarifres_synth.sas7bdat"),
                Me._Connection.Connection,
                csteLibSASCalculsInt)

            Dim SyntheseSimul As DataTable = ResultatsDet.execute_DataTableSortie(False)

            'La table attendu en sortie pour les graphiques contient 2 colonnes :
            '   - Une avec la valeur du choc : Titre = Nom du paramètre choqué
            '   - Une avec le S/P : Titre = "S/P"
            'Il faut donc renommer ces deux colonnes dans la table générée par le programme SAS
            SyntheseSimul.Columns("ValChoc").ColumnName = _nom
            SyntheseSimul.Columns("SP").ColumnName = "S/P"

            'La valeur à représenter sur le radar est enregistrée dans ValeurRadar
            'Il faut rechercher dans la colonne "_nom" la valeur du choc correspondant à celui qui sera représenté sur le radar
            'et récupérer la valeur du S/P pour la mettre dans valeurRadar.
            Dim RowRadar As DataRow = (From r In SyntheseSimul.Rows Select r Where Math.Abs(r(_nom) - _chocRadar) < 0.00000001).FirstOrDefault
            _valeurRadar = RowRadar("S/P")

            'Si la ligne a été ajoutée spécifiquement pour le radar (ne fait pas partie du graphique), on la supprime.
            If Int((_chocRadar - _chocMin) / _pas) <> (_chocRadar - _chocMin) / _pas Then RowRadar.Delete()

            _resultats = SyntheseSimul

        End Sub
    End Class

End Namespace